home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
future86.arc
/
DRIVER.LST
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
File List
|
1987-04-24
|
93.4 KB
|
1,431 lines
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 1
DRIVER...Console out file driver
TITLE 'DRIVER...Console out file driver'
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\This demonstration source code is copyrighted and is for the \\\
\\\express use of FUTURE86 users persuant to the terms of the \\\
\\\FUTURE86 license. \\\
\\\ \\\
\\\Copyright (C)1987 Development Associates \\\
\\\All rights reserved \\\
\\\ \\\
\\\This source code may be evaluated by potential FUTURE86 \\\
\\\users to determine product suitability. \\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\Some resources in this file are not utilized by \\\
\\\the demonstration program. \\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\ RFD Revised 4-02-87 --general file cleanup \\\
\\\ 4-17-87 --added recoding examples \\\
\\\ 4-18-87 --added cpu timing independence \\\
\\\ 4-19-87 --added scale music \\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 2
DRIVER...Console out file driver
\\\Define system constants, etc..
0000001B = ESCAPE EQU 27 \ESCAPE key
1EF0/4F18 SCREENSIZE DW 184FH \18=hex rows, 4F=columns
1EF2/07 CRTATR DB 07 \VIDEO Attribute
0000:0462 = PAGE# EQU 0:462H \DOS page addr
000000D9 = LRCORN EQU 217 \CODE for LR char
000000DA = ULCORN EQU 218 \CODE for UL char
000000C0 = LLCORN EQU 192 \CODE for LL char
000000BF = URCORN EQU 191 \CODE for UR char
\\\SCREEN ATTRIBUTE CONTROL\\\
1EF3/ : GET_ATR
1EF3/E841E2 F21E E817E3 E9E7E3 CRTATR B@ SWAP ; \get ATR & put under mask
\NOTE: THESE MODES CAN BE MIXED
1EFE/ : VSET \logical OR
1EFE/E8F2FF E836E5 GET_ATR FOR
1F04/E830E2 F21E E9DFE2 CRTATR B! ;
1F0C/ : VCLR \logical AND
1F0C/E8E4FF E81EE5 GET_ATR FAND
1F12/E822E2 F21E E9D1E2 CRTATR B! ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 3
DRIVER...Console out file driver
\THE NEXT WORDS SET UP THE VIDEO ATRIBUTES BUT DO NOT CAUSE
\ANY ACTION UNTIL EITHER FCO OR XCO AND THEIR DERIVATIVES
\ARE USED(these words are defined later in this file)
1F1A/ : NORM \normal video attribute
1F1A/E809E2 07 E8EBFF 7 VCLR
1F21/E802E2 07 EBD7 7 VSET ;
1F27/ : INTENS \intensified chars
1F27/E8FCE1 08 EBD1 01000B VSET ;
1F2D/ : -INTENS \cancel intensity
1F2D/E8F6E1 F7 EBD9 11110111B VCLR ;
1F33/ : BLINK \char blinking
1F33/E8F0E1 80 EBC5 10000000B VSET ;
1F39/ : -BLINK \cancel char blink
1F39/E8EAE1 7F EBCD 1111111B VCLR ;
1F3F/ : REVERSE \reverse video
1F3F/E8E4E1 70 E8B8FF 01110000B VSET
1F46/E8DDE1 F8 EBC0 11111000B VCLR ;
1F4C/ : -REVERSE \cancel reverse video
1F4C/E8D7E1 07 E8ABFF 111B VSET
1F53/E8D0E1 8F EBB3 10001111B VCLR ;
1F59/ : BLACK \dark screen--no chars
1F59/E8CAE1 88 EBAD 10001000B VCLR ;
1F5F/ : WHITE \bright screen--no chars
1F5F/E8C4E1 77 EB99 01110111B VSET ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 4
DRIVER...Console out file driver
\\\DEFINE INT 10H STRUCTURE
1F65/ : INT_10H
1F65/E8BEE1 10 E8BFEF 10H SET_INT_NO
1F6C/E8F9ED !AH
1F6F/E84DEF SYSTEM_CALL
1F72/E9BEEF RESTORE_INT_NO ;
\\\SET VIDEO MODE
\NOTE THAT PROCEDURE NAMES CAN BE SELECTED TO DOCUMENT TO ANY
\DESIRED LEVEL--THERE REALLY CAN NOT BE ANY DOUBT ABOUT WHAT THE
\NEXT FEW WORDS DO
\EQU FOR VIDEO MODE SELECTION
00000000 = 40X25_BW EQU 0
00000001 = 20X25_COLOR EQU 1
00000002 = 80X25_BW EQU 2
00000003 = 320X200_COLOR EQU 3
00000004 = 320X200_BW EQU 4
00000005 = 320X200_GRAPH EQU 5
00000006 = 640X200_GRAPH EQU 6
00000007 = 80X25_MONO EQU 7 \mono card only
1F75/ : SET_VIDEO_MODE \mode ---
1F75/E8F8ED !AL \store mode
1F78/E80EE2 0 \operation type
1F7B/EBE8 INT_10H ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 5
DRIVER...Console out file driver
\\\SET ACTIVE PAGE#\\\
1F7D/ : ?PAGE#
1F7D/E8D5E1 62040000 E98BE2 PAGE# B@ ; \Get active page no.
1F87/ : SET_PAGE# \PAGE# ---
\page no. = 0--3 for CGA
1F87/E8E6ED !AL
1F8A/E899E1 05 EBD5 5 INT_10H ;
\\\FORCE CURSOR POSITION
1F90/ : PUT_CURS \ row colm ---
1F90/E825EE !DL \colm
1F93/E81AEE !DH \row
1F96/E8E4FF E8E4ED ?PAGE# !BH
1F9C/E887E1 02 EBC3 2 INT_10H ;
\\\FIND CURSOR POSITION\\\
1FA2/ : GET_CURS \ --- Attrib row colm
1FA2/E8D8FF E8D8ED ?PAGE# !BH
1FA8/E87BE1 03 E8B6FF 3 INT_10H
1FAF/E87EEE @CX \get atr
1FB2/E89BEE @DH \get row
1FB5/E9A0EE @DL ; \get colm
1FB8/ : HOME \move cursor to upper left of screen
1FB8/E8CEE1 E8EAED 0 !DX
1FBE/E8BCFF E8BCED ?PAGE# !BH
1FC4/E85FE1 02 2
1FC8/EB9B INT_10H ;
\\\CLEAR DESIRED SCREEN AMOUNT\\\
1FCA/ : CLR \srow scolm erow ecolm
1FCA/E8BCE1 E8A0ED 0 !AL
1FD0/E8E5ED !DL \ecolm
1FD3/E8DAED !DH \erow
1FD6/E8C7ED !CL \sclm
1FD9/E8BCED !CH \srow
1FDC/E858E1 F21E E82EE2 E899ED CRTATR B@ !BH \crtatr
1FE7/E83CE1 06 E977FF 6 INT_10H ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 6
DRIVER...Console out file driver
\\\READ SCREEN CHAR AT CURSOR\\\
1FEE/ : READ_CHAR/AT \ --- atr char
1FEE/E88CFF E88CED ?PAGE# !BH \page no.
1FF4/E82FE1 08 E86AFF 8 INT_10H
1FFB/E80AEE @AH \atr
1FFE/E90FEE @AL ; \char
\\\WRITE SCREEN CHARS AT CURSOR\\\
2001/ : WRITE_CHAR/AT \char size ---
2001/E879FF E879ED ?PAGE# !BH \page no.
2007/E886ED !CX \no. of chars to write
200A/E863ED !AL \char
200D/E827E1 F21E E8FDE1 E870ED CRTATR B@ !BL \atr
2018/E80BE1 09 E946FF 9 INT_10H ;
201F/ : WRITE_ATR \ ---
201F/E8CCFF READ_CHAR/AT \ get char & atr at curs pos
2022/E883E2 DROP2ND
2025/E840E1 1
2028/EBD7 WRITE_CHAR/AT ; \rewrite char w/new atr
202A/ : CLR_SCREEN \CLEAR ENTIRE SCREEN
202A/E85CE1 E859E1 0 0
2030/E8F3E0 18 E8EFE0 4F EB90 24 79 CLR ;
203A/ : CLS \same as IBM CLS
203A/E87BFF EBEB HOME CLR_SCREEN ;
203F/ : BEL \ring computer bell
203F/E8E4E0 07 E96EEF 7 CO ;
\\\SCROLL CONTROL
2046/ : SCROLL_UP_LINES \n1(lines to scroll up) ---
2046/E827ED !AL \no. lines to scroll
2049/E83DE1 E841ED 0 !CX \start scroll at UL corner
204F/E8E5E0 F01E E8C9E1 E84EED SCREENSIZE @ !DX \end row,column of scroll
205A/E8DAE0 F21E E8B0E1 E81BED CRTATR B@ !BH \atr used on blank line
2065/E8BEE0 06 E9F9FE 6 INT_10H ;
206C/ : SCROLL_UP_ONE_LINE
206C/E8F9E0 EBD5 1 SCROLL_UP_LINES ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 7
DRIVER...Console out file driver
\\\The next word, FCO, is a console out procedure and is written mostly
\in assembly language for maximum speed. This has the same function
\as the kernel word CO but is faster. An even faster and less
\portable method would be a direct hardware access but that should
\not be used except in the most time critical applications.
\A word that follows, XCO, is a mix of high level and assembly.
\FCO runs much faster than XCO which shows the speed advantage
\that low level code can yield. However, XCO is much more readable
\and was obviously easier to write. In fact, FCO was written after
\XCO was developed and was used as the basis for coding FCO. this is
\a good example of a valid development technique--first prototyping in
\high level and then--if the application requires-rewriting in assembler.
\Note the use of local labels signified by the "_" character
\in front of the label.
2071/ : FCO
2071/06 PUSH ES \preset es:=0
2072/B80000 MOV AX,0 \= DOS low memory
2075/8EC0 MOV ES,AX
2077/B403 MOV AH,3 \get cursor pos.
2079/268A3E6204 MOV BH,BYTE ES:PAGE# \get current disp. page
207E/55 PUSH BP
207F/CD10 INT 10H
2081/5D POP BP
\
2082/8A4600 MOV AL,[BP] \load the character
2085/3C0D CMP AL,0DH \CR?
2087/7505 JNE _FCO_BS \branch if not
2089/B200 MOV DL,0 \clear column reg.
208B/E95900 JMP _FCO2 \set cursor and return
208E/ _FCO_BS:
208E/3C08 CMP AL,08 \BS?
2090/750A JNE _FCOLFX \branch if not
2092/80FA00 CMP DL,0 \far left colmn?
2095/7450 JE _FCO2 \branch if so
2097/FECA DEC DL \else decrement cursor
2099/E94B00 JMP _FCO2 \set cursor & return
209C/ _FCOLFX:
209C/3C0A CMP AL,0AH \LF?
209E/7428 JE _FCO_LF \branch if so
20A0/3C07 _?BEL: CMP AL,7
20A2/7506 JNE _FCO_CHR
20A4/ _BEL:
20A4/E898FF BEL \speed not important; so hi level
20A7/E94800 JMP _XDN \now drop stack and exit
\
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 8
DRIVER...Console out file driver
20AA/ _FCO_CHR:
20AA/52 PUSH DX \save current cursor
20AB/B409 MOV AH,9 \write current atr & chr
20AD/2E8A1EF21E MOV BL,BYTE CS:CRTATR \get char attribute
20B2/268A3E6204 MOV BH,BYTE ES:PAGE# \get page no.
20B7/B90100 MOV CX,1 \char count
20BA/55 PUSH BP
20BB/CD10 INT 10H
20BD/5D POP BP
20BE/5A POP DX \get current cursor
20BF/FEC2 INC DL \advance colmn
20C1/80FA50 CMP DL,80 \colmn limit?
20C4/7504 JNZ _FCO1 \branch if not
20C6/B200 MOV DL,0 \set far left position
20C8/ _FCO_LF:
20C8/FEC6 INC DH \advance row
20CA/80FE18 _FCO1: CMP DH,24 \row limit?
20CD/7E18 JLE _FCO2 \branch if not
20CF/B618 MOV DH,24 \set bottom position
20D1/52 PUSH DX \save cursor position
20D2/B80106 MOV AX,601H \scroll up one line
20D5/B90000 MOV CX,0 \left upper corner
20D8/2E8B16F01E MOV DX,CS:SCREENSIZE \right lower corner
20DD/2E8A3EF21E MOV BH,CS:CRTATR \attribute
20E2/55 PUSH BP
20E3/CD10 INT 10H
20E5/5D POP BP
20E6/5A POP DX \get cursor position
20E7/ _FCO2:
20E7/B402 MOV AH,2 \set new cursor position
20E9/268A3E6204 MOV BH,BYTE ES:PAGE# \active display page
20EE/55 PUSH BP
20EF/CD10 INT 10H
20F1/5D POP BP
20F2/83C504 _XDN: ADD BP,4 \clean stack
20F5/07 C3 POP ES ; \finally, the end of FCO
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 9
DRIVER...Console out file driver
\\\XCO IS A GOOD EXAMPLE OF MIXING ASSEMBLY AND HI-LEVEL IN A MODELESS
\WAY THAT IS NATURAL WITH FUTURE86.
20F7/ : XCO
20F7/E883FE E883EC ?PAGE# !BH \select page no.
20FD/E826E0 03 E861FE 3 INT_10H
2104/E849ED @DH
2107/E81CE0 18 E8E6E2 24 <
210E/E864E0 E305 IF
2113/E90F00 JMP _OUTPUT \branch if now row limit
2116/EB0D ELSE
2118/E851FF SCROLL_UP_ONE_LINE \hi-level scroll..but just once/line
211B/E808E0 17 E867E0 E86BFE 23 0 PUT_CURS \adjust cursor position
2125/ THEN
2125/ _OUTPUT: \this is local label
2125/E8F7FE WRITE_ATR \put the character attribute
2128/E989EE CO ; \write the character
\STRING OUTPUT VERSION THAT USES FCO
212B/ : FPRINTS
212B/ BEGIN \string(addr,length)---
212B/E840E7 ?NULL
212E/E84BE0 E209 -IF
2133/E82DE9 E838FF CGET FCO
2139/E9EFFF C3 REPEAT ;
213D/ : BACK_UP \backspace, nondestructive
213D/E8E6DF 08 E92DFF 08 FCO ;
2144/ : FCRLF
2144/E8DFDF 0A E826FF 10 FCO \line feed
214B/E8D8DF 0D E91FFF 13 FCO ; \carriage return
\GENERATE MULTIPLE CRS
2152/ : CRS \ n ---
2152/E860E0 DO
2155/E8ECFF FCRLF
2158/E869E0 E9F7FF C3 LOOP ;
215F/ : DRAW \ char # ---
215F/E853E0 DO
2162/E81FE1 E809FF DUP FCO
2168/E859E0 E9F4FF E933E1 LOOP DROP ;
2171/ : SEP \make a line of '=' marks
2171/E8B2DF CD E8AEDF 50 EBE4 205 80 DRAW ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 10
DRIVER...Console out file driver
\\\PRIMATIVE TEXT LINES\\\
217B/ : LF \linefeed
217B/E8A8DF 0A E9EFFE 10 FCO ;
2182/ : H_BIT \make a '-'
2182/E8A1DF C4 E9E8FE 196 FCO ;
2189/ : V_BIT \make a vertical mark
2189/E89ADF B3 E9E1FE 179 FCO ;
2190/ : HLINE \horiz line from curs pos
2190/E8D5DF E88AE3 1 MAX
2196/E81CE0 DO
2199/E8E6FF H_BIT
219C/E825E0 E9F7FF C3 LOOP ;
21A3/ : VLINE \vert line from curs pos
21A3/E8FCFD GET_CURS
21A6/E84BE4 E8F8E0 DSWAP DROP
21AC/E8B9DF E86EE3 1 MAX
21B2/E800E0 DO
21B5/E8D9E0 E8D5FD DDUP PUT_CURS
21BB/E8CBFF V_BIT
21BE/E8F6E1 1+2ND
21C1/E800E0 E9EEFF LOOP
21C7/E9D7E0 DDROP ;
21CA/ : LIMIT
21CA/E859DF 02 E84FE3 E852DF 02 E98FE1 2 MAX 2 - ;
21D8/ : SETUP_BOX \manipulate stack
21D8/E819E4 E8ECFF DSWAP LIMIT
21DE/E804E1 E8E6FF SWAP LIMIT
21E4/E8FEE0 E80AE4 E8A4E0 SWAP DSWAP DDUP
21ED/E9A0FD PUT_CURS ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 11
DRIVER...Console out file driver
21F0/ : TOP_LINE \draw top horiz
21F0/E833DF DA E87AFE ULCORN FCO
21F7/E82CDF 04 E809E1 E88FFF 4 PICK HLINE
2201/E822DF BF E869FE URCORN FCO
2208/E832FF BACK_UP
220B/E96DFF LF ;
220E/ : RVERT_LINE \draw right vert
220E/E815DF 03 E8F2E0 EB8C 3 PICK VLINE ;
2217/ : LVERT_LINE \draw left vert
2217/E876FD E85EFF PUT_CURS LF
221D/E883FF VLINE
2220/E81AFF BACK_UP
2223/E800DF C0 E947FE LLCORN FCO ;
222A/ : BOT_LINE \draw bot horiz
222A/E863FF E8F6DE D9 E93DFE HLINE LRCORN FCO ;
2234/ : BOX \horizlen vertlen row colm --- box
2234/E8A1FF SETUP_BOX \horizlen = 80 MAX
2237/E8B6FF TOP_LINE \vertlen = 24 MAX
223A/E8D1FF RVERT_LINE
223D/E8D7FF LVERT_LINE
2240/EBE8 BOT_LINE ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 12
DRIVER...Console out file driver
\\\SOUND\\\
000000B6 = TMR_MDE_REG EQU 0B6H \timer mode register
00000043 = TM_MDE_PRT EQU 43H \timer mode port
000004C5 = SCALE EQU 1221 \freq scale# for IBM PC
00000042 = TMR2_PRT EQU 42H \timer 2 port
00000061 = PRTB EQU 61H \timer port B
00000003 = SPK_ON EQU 03 \'on' command code
00000001 = SPK_OFF EQU 1 \'off' command code
2242/0000 SAVEIT DW 0 \command save bucket
2244/ : SETUP \ --- ; init reg & port
2244/E8DFDE B6 TMR_MDE_REG
2248/E8DBDE 43 TM_MDE_PRT
224C/E958E2 FOUT ;
224F/ : FREQ \ freq ---
224F/E8B2DE C504 SCALE
2254/E8ADDE E803 E85CE5 1000 D*
225C/E886E0 E8DDE5 SWAP D/
2262/E81FE0 E8BEDE 42 DUP TMR2_PRT
2269/E83BE2 FOUT
226C/E8B7DE 08 E8DBE1 8 SR
2273/E8B0DE 42 E92DE2 TMR2_PRT FOUT ;
227A/ : SOUND_ON \ --- ;activate tone generator
227A/E8A9DE 61 E81CE2 E800E0 PRTB FIN DUP
2284/E8B0DE 4222 E86BDF SAVEIT !
228C/E897DE 03 SPK_ON
2290/E8A7E1 FOR
2293/E890DE 61 E90DE2 PRTB FOUT ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 13
DRIVER...Console out file driver
229A/ : OFF \turn tone off
229A/E89ADE 4222 E87EDF SAVEIT @
22A2/E881DE 61 E9FEE1 PRTB FOUT ;
22A9/ : TONE_CHANGE \ freq --- ;to change tone pitch
22A9/E898FF EBA1 SETUP FREQ ;
22AE/ : TONE \freq, in cps ---
22AE/E8F8FF TONE_CHANGE
22B1/EBC7 SOUND_ON ;
\\\equates for musical notes, cps
00000210 = CNXT EQU 528
000001B8 = ANAT EQU 440
000001EF = BNAT EQU 495
0000018C = GNAT EQU 396
00000160 = FNAT EQU 352
0000014A = ENAT EQU 330
00000129 = DNAT EQU 297
00000108 = CNAT EQU 264
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 14
DRIVER...Console out file driver
\ This section displays the contents of a text file.
\ By use of a separate script file each character
\ output can be controlled as to format and speed and
\ screen placement.
\ Script file contains the following characters
\ that change the output text mode as follows:
\ a ... normal output, next 3 bytes = #chars to output
\ b ... inverse output, "
\ c ... blink output, "
\ d ... intensity, "
\ e ... Reset delay
\ f ... set shortest delay
\ g ... set longer delay
\ h ... set longer delay
\ i ... set longest delay
\ j ... clear screen, put cursor at 0 0
\ k ... move cursor, next 2 bytes are x,y
\ l ... send prompt message to screen and wait for input
\ m ... output string(no format change), next 3 bytes=#chars
\ n ... make a computer bell
\ o ... execute programmed delay
\ p ... draw a box, next 4 bytes are ysize,xsize,row,colm
\ q ... switch to 1st display page
\ r ... switch to 2nd display page
\ s ... make programmed tone
\ t ... turn tone off
\ u ... make a click
\ v ... clr desired part of screen,
\ next 4 bytes are srw,sclm,erw,eclm
\ X ... programmed end of program...outputs message to crt.
\ CR and other characters in the script
\ file are disregarded
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 15
DRIVER...Console out file driver
00000003 = CTLC EQU 3
----:1050 data EXIT_FLG DSW
----:1052 data OUTPUT_COUNT DSW
000061A8 = FILE_SIZE EQU 25000
----:1054 data SCRIPT_BUF DSB 4000 \script buffer reservation
----:1FF4 data FILE_BUF DSB FILE_SIZE \text file buffer reservation
22B3/ : SET_EXIT
22B3/E890DE 5010 E92EE1 EXIT_FLG 1! ;
\\\Programmed delay...insensitive to cpu clock speed
\\\Please note: FUTURE86 makes this easier than in most
\\\other languages..we do not need to save and then restore
\\\all sorts of machine status to do this
22BB/0000 DELAY_TIME DW 0 \variable for needed delay
00000070 = TIMER_INT EQU 70H \01CH * 4..user timer vector
22BD/0000 TIMER_COUNT DW 0 \counter bucket
22BF/00000000 ORIG_VECTOR DD 0 \save loc. for orig addr
22C3/ : TIMER_DONE \reset bucket
22C3/E871DE BD22 E913E1 TIMER_COUNT 0! ;
22CB/ : SET_ORIG_VECTOR \restore user vector
22CB/E869DE BF22 E85BDF ORIG_VECTOR D@
22D3/E850DE 70 E929DF TIMER_INT D! ;
\next is in assembler for low overhead during timer tick
22DA/ : INC_TIMER \this is new user code
22DA/ TIMER_VECTOR: \ref. addr label
22DA/2EFF06BD22 INC CS:TIMER_COUNT \new entry point
22DF/CF IRET \done
22E0/C3 ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 16
DRIVER...Console out file driver
22E1/ : SET_NEW_VECTOR \install the user vector
22E1/E853DE DA22 TIMER_VECTOR
22E6/E83DDE 70 E916DF TIMER_INT D! ;
22ED/ : SAVE_ORIG_VECTOR \save so we know what to put back
22ED/E836DE 70 E83ADF TIMER_INT D@
22F4/E840DE BF22 E907DF ORIG_VECTOR D! ;
22FC/ : SET_DELAY \ n1 --- (each # is approx 55 ms)
22FC/E838DE BB22 E8F3DE DELAY_TIME !
2304/E882DE C3 0 ;
2308/ : ?TIMER_DONE \stay here until we time out
2308/ BEGIN
2308/E82CDE BD22 E810DF TIMER_COUNT @
2310/E824DE BB22 E808DF DELAY_TIME @
2318/E8EDE0 E866DF > DUP
231E/E854DE E306 IF
2323/E8A5FF SET_ORIG_VECTOR
2326/E89AFF TIMER_DONE
2329/ THEN
2329/E849DE E3DA C3 UNTIL ;
232F/ : DELAY \programmable delay
232F/E805DE BB22 E8E9DE DELAY_TIME @
2337/E83BDE E306 IF
233C/E8A2FF SET_NEW_VECTOR \turn on timer
233F/E8C6FF ?TIMER_DONE \wait till done and continue
2342/C3 THEN ;
2343/ : INIT_TIMER \this saves orig vector and initializes
2343/E8A7FF SAVE_ORIG_VECTOR
2346/E8EEDD BD22 E890E0 TIMER_COUNT 0!
234E/E8E6DD BB22 E988E0 DELAY_TIME 0! ;
\\\PLAY THE SCALE
2356/ : DURATION
2356/E8CDDD 03 E89FFF E844DF EBCD 3 SET_DELAY DROP DELAY ;
2362/ : NOTE
2362/E849FF E8EEFF E92FFF TONE DURATION OFF ;
236B/ : PLAY
236B/E8B8DD 08 E843DE E8EDFF E84CDE E9.. 8 DO NOTE LOOP ;
237C/ : SCALE_DOWN
237C/E885DD 0801 CNAT
2381/E880DD 2901 DNAT
2386/E87BDD 4A01 ENAT
238B/E876DD 6001 FNAT
2390/E871DD 8C01 GNAT
2395/E86CDD B801 ANAT
239A/E867DD EF01 BNAT
239F/E862DD 1002 C3 CNXT ;
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 17
DRIVER...Console out file driver
23A5/ : SCALE_UP
23A5/E85CDD 1002 CNXT
23AA/E857DD EF01 BNAT
23AF/E852DD B801 ANAT
23B4/E84DDD 8C01 GNAT
23B9/E848DD 6001 FNAT
23BE/E843DD 4A01 ENAT
23C3/E83EDD 2901 DNAT
23C8/E839DD 0801 C3 CNAT ;
\if below is executed by itself..be sure to execute INIT_TIMER first
23CE/ : SCALE_UP/DOWN
23CE/E8ABFF SCALE_DOWN
23D1/E8D1FF SCALE_UP
23D4/E84FDD 02 2
23D8/E8DADD DO
23DB/E88DFF PLAY
23DE/E8E3DD E9F7FF C3 LOOP ;
\the commented out code is used if just software delay is used
\: SET_DELAY
\ DELAY_TIME ! 0 ;
\: DELAY \programmable delay
\ DELAY_TIME @
\ IF
\ DELAY_TIME @
\ DO
\ LOOP
\ THEN ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 18
DRIVER...Console out file driver
\\\Misc. text messages
23E5/ : FPRINTS+CRS
23E5/E85CFD E840FD E956FD FCRLF FPRINTS FCRLF ;
23EE/ : ESC_MSG
23EE/E854E4 14 45 73 63 20 6B 65 79 20.. "Esc key depressed..." ;
2407/ : OUTPUT_ESC_MSG
2407/E8E4FF EBD9 ESC_MSG FPRINTS+CRS ;
240C/ : ?USER_KEY \test for user Esc key depress
240C/E88CEB CONSTS
240F/E863DD E315 IF
2414/E8EBEB E80CDD 1B E8F2DF DCI ESCAPE =
241E/E854DD E306 IF
2423/E8E1FF OUTPUT_ESC_MSG
2426/E88AFE SET_EXIT
2429/ THEN
2429/C3 THEN ;
\Output string to monitor with program. interchar delay
242A/ : CPRINTS \sinfo ---
242A/ BEGIN
242A/E836E6 CGET
242D/E8FFFE E83EFC DELAY FCO
2433/E838E4 ?NULL
2436/E843DD E203 -IF
243B/E9ECFF C3 REPEAT ;
243F/ : RETMSG
243F/E802FD E8E1DC 04 E803EC FCRLF 4 SPACES
2449/E8F9E3 33 20 50 72 65 73 73 20 45.. " Press Esc key to abort or SPACE bar to continue..."
2480/E8A4FA E8B9FA INTENS REVERSE
2486/E8A2FC E88EFA FPRINTS NORM
248C/E873EB BEGIN DCI
248F/E8F2DD E891DC 20 E877DF E849DE DUP 32 = SWAP
249C/E887DC 1B E86DDF E8DEDD ESCAPE = DUP
24A6/E89DDC 5010 E849DD E889DF EXIT_FLG ! FOR
24B1/E8C1DC E3D6 UNTIL
24B6/E88DDC 5010 E862DD EXIT_FLG @
24BE/E8B4DC E306 E87EFC IF FCRLF
24C6/E83EFF OUTPUT_ESC_MSG
24C9/C3 THEN ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 19
DRIVER...Console out file driver
24CA/ : FATAL_ERROR_COND \ ---
24CA/E877FC E820F0 FCRLF DISPLAY_ERR_MSG
24D0/E871FC E869FF E96EEA FCRLF RETMSG REBOOT ;
24D9/ : TEST_ERROR \cond ---
24D9/E8A0DC E203 -IF
24DE/E8E9FF FATAL_ERROR_COND
24E1/C3 THEN ;
24E2/ : ?OPEN_FILE \ ---
24E2/E8A9EC GET_ARG
24E5/E80FF2 OPEN
24E8/EBEF TEST_ERROR ;
24EA/ : OPEN_FILES
24EA/E8F5FF E8BEF7 ?OPEN_FILE SET#1 \open text file
24F0/E8EFFF E9D0F7 ?OPEN_FILE SET#2 ; \open script file
24F6/ : CLOSE_FILES \ ---
24F6/E89DF7 E825F4 E8A5DD #1 CLOSE DROP \ignore error flags
24FF/E89CF7 E81CF4 E99CDD #2 CLOSE DROP ;
2508/ : READ_TEXT_FILE \ --- sinfo
2508/E83BDC F41F E8F4DB A861 FILE_BUF FILE_SIZE
2512/E881F7 E8F7F5 EBBF #1 READ TEST_ERROR ;
\ --- sinfo(txt) sinfo(script)
251A/ : READ_FILES
251A/E8EBFF READ_TEXT_FILE
251D/E826DC 5410 E8DFDB A00F E874F7 E8.. SCRIPT_BUF 4000 #2 READ
252D/EBAA TEST_ERROR ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 20
DRIVER...Console out file driver
\The next few words are examples of how much easier coding
\in FUTURE86 can be. The commented out (with the '\' character)
\definitions are coded in high level FUTURE86 and is quite efficient,
\but active definitions that follow with the same names are
\coded at even a higher level that really simplifies the
\code and its readability.
\: 3BYTE# \sinfo --- sinfo
\ OVER \get starting address of no.
\ 3 \string is 3 bytes long
\ DECIMAL-BIN \convert to bin. no.
\ DROP \assume success, drop flag
\ OUTPUT_COUNT ! \save converted value to variable
\ SWAP \get original addr of string
\ 3 + \push it up by no. amount
\ SWAP \put it back
\ 3 - ; \adjust string length and finished
\get characters from string and convert to an n digit number
252F/ : NUMBER_GET \sinfo n1 --- sinfo n2
252F/E82BE4 SSPLIT
2532/E899E7 DECIMAL-BIN
2535/E844DC E226 -IF
253A/E8FAEA CRLF
253D/E805E3 19 49 6E 76 61 6C 69 64 20.. "Invalid number...Abort..." \the fatal error msg
255A/E8C8EA SPRINT
255D/E8E7E9 REBOOT \its a fatal error...return to DOS
2560/C3 THEN ;
2561/ : 3BYTE# \sinfo --- sinfo
2561/E8C2DB 03 E8C7FF 3 NUMBER_GET
2568/E8DBDB 5210 E987DC OUTPUT_COUNT ! ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 21
DRIVER...Console out file driver
\: 2_CONV
\ OVER 2 DECIMAL-BIN DROP ; \subprocess for next words
\
\: TWO_ADJ \another subprocess
\ SWAP 2+ SWAP 2 - ;
\: TWO_2CHR# \sinfo --- sinfo row colm
\ 2_CONV
\ >R \save in return stack
\ TWO_ADJ \adjust string addr
\ \1st byte finished
\ 2_CONV
\ >R
\ TWO_ADJ
\ R> R> \get nos. back to stack
\ SWAP ; \put them in correct order and done
\
2570/ : 2CHR# \sinfo --- sinfo n1
2570/E8B3DB 02 EBB9 2 NUMBER_GET ;
2576/ : TWO_2CHR# \sinfo --- sinfo n1 n2
2576/E8F7FF E8BCDD 2CHR# >R
257C/E8F1FF E8C2DD E960DD 2CHR# R> SWAP ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 22
DRIVER...Console out file driver
\: FOUR.NUMBERS \sinfo --- sinfo sr sc er ec
\ 2_CONV
\ >R
\ TWO_ADJ
\ \1st byte
\ 2_CONV
\ >R
\ TWO_ADJ
\ \2nd byte
\ 2_CONV
\ >R
\ TWO_ADJ
\ \3rd byte
\ 2_CONV
\ >R
\ TWO_ADJ
\ \4th byte
\ R> R> R> R> \get data back to stack
\ SWAP \reorder values
\ DSWAP
\ SWAP ;
\define temp no. storage
----:819C data NUM1 DSW
----:819E data NUM2 DSW
----:81A0 data NUM3 DSW
----:81A2 data NUM4 DSW
2585/ : FOUR.NUMBERS \sinfo --- sinfo n1 n2 n3 n4
2585/E8E8FF E8BBDB 9C81 E867DC 2CHR# NUM1 ! \get 1st no
2590/E8DDFF E8B0DB 9E81 E85CDC 2CHR# NUM2 ! \2nd no
259B/E8D2FF E8A5DB A081 E851DC 2CHR# NUM3 ! \3rd no
25A6/E8C7FF E89ADB A281 E846DC 2CHR# NUM4 ! \4th no
25B1/E892DB 9C81 E867DC NUM1 @ \put result nos. on stack
25B9/E88ADB 9E81 E85FDC NUM2 @
25C1/E882DB A081 E857DC NUM3 @
25C9/E87ADB A281 E94FDC NUM4 @ ;
25D1/ : NO_TEXT_MSG
25D1/E871E2 0E 54 65 78 74 20 65 78 68.. "Text exhausted"
25E3/E9FFFD FPRINTS+CRS ;
25E6/ : PROGRAMMED_END \for debug
25E6/E85CE2 18 50 72 6F 67 72 61 6D 6D.. "Programmed end of text.."
2602/E9E0FD FPRINTS+CRS ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 23
DRIVER...Console out file driver
2605/ : NORMZ \ --- flg
2605/E812F9 E856FF E85ADB C3 NORM 3BYTE# 1 ;
260F/ : REVERSEZ \ --- flg
260F/E82DF9 E84CFF E850DB C3 REVERSE 3BYTE# 1 ;
2619/ : BLINKZ \ --- flg
2619/E817F9 E842FF E846DB C3 BLINK 3BYTE# 1 ;
2623/ : INTENSZ \ --- flg
2623/E801F9 E838FF E83CDB C3 INTENS 3BYTE# 1 ;
262D/ : SDELAY1 \ --- flg
262D/E838DB E9C9FC 1 SET_DELAY ;
2633/ : SDELAY2 \ --- flg
2633/E8F0DA 02 E9C2FC 2 SET_DELAY ;
263A/ : SDELAY3 \ --- flg
263A/E8E9DA 08 E9BBFC 8 SET_DELAY ;
2641/ : SDELAY4 \ --- flg
2641/E8E2DA 0A E9B4FC 10 SET_DELAY ;
2648/ : RESET_DELAY \ --- flg
2648/E83EDB E9AEFC 0 SET_DELAY ;
264E/ : CLSZ \ --- flg
264E/E8E9F9 E835DB C3 CLS 0 ;
2655/ : >CURSOR \ --- flg
2655/E81EFF TWO_2CHR#
2658/E835F9 E82BDB C3 PUT_CURS 0 ;
265F/ : RETMSGZ \ --- flg
265F/E8DDFD E824DB C3 RETMSG 0 ;
2666/ : LENGTH \ --- flg
2666/E8F8FE E8FCDA C3 3BYTE# 1 ;
266D/ : BELZ \ --- flg
266D/E8CFF9 E816DB C3 BEL 0 ;
2674/ : DO_DELAY \ --- flg
2674/E8B8FC E80FDB C3 DELAY 0 ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 24
DRIVER...Console out file driver
267B/ : BOXZ \draw box from script entry
267B/E8F8FE E8B7DC E8B4DC TWO_2CHR# >R >R
2684/E8EFFE E8BADC E8B7DC TWO_2CHR# R> R>
268D/E864DF SSWAP
2690/E8A1FB E8F3DA C3 BOX 0 ;
2697/ : 1ST_PAGE \switch to page #1 --- flg
2697/E8EFDA E8EAF8 E8E9DA C3 0 SET_PAGE# 0 ;
26A1/ : 2ND_PAGE \switch to page #2 (CGA only) --- flg
26A1/E8C4DA E8E0F8 E8DFDA C3 1 SET_PAGE# 0 ;
26AB/ : TONE_ON \ --- flg
26AB/E8B3FE 3BYTE#
26AE/E895DA 5210 E86ADB OUTPUT_COUNT @
26B6/E9F5FB TONE ;
26B9/ : TONE_ON_0 \ --- flg
26B9/E8EFFF E8CADA C3 TONE_ON 0 ;
26C0/ : TONE_OFF \ --- flg
26C0/E8D7FB E8C3DA C3 OFF 0 ;
26C7/ : TONE_BURST \ --- flg
26C7/E8E1FF TONE_ON \freq, in cps
26CA/E859DA C8 200 \wait for awhile..timer tick
26CE/E8E4DA DO \is too slow, so use empty loop
26D1/E8F0DA E9FAFF LOOP \AT machines will be higer pitched
26D7/EBE7 TONE_OFF ;
\clear desired screen area
26D9/ : CLR_SOME \ --- flg
26D9/E8A9FE FOUR.NUMBERS
26DC/E8EBF8 E8A7DA C3 CLR 0 ;
26E3/ : TXT_END \script says this is end
26E3/E800FF PROGRAMMED_END
26E6/E8CAFB E89DDA C3 SET_EXIT 0 ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 25
DRIVER...Console out file driver
26ED/ : SCRIPT_ACTION \perform proper action according to script
\file character. ---
26ED/E8CEDE EB60 CASE
26F2/6100 0526 'a' NORMZ \normal output
26F6/6200 0F26 'b' REVERSEZ \reverse video
26FA/6300 1926 'c' BLINKZ \blink video
26FE/6400 2326 'd' INTENSZ \hi intensity video
\
2702/6500 4826 'e' RESET_DELAY \no inter char delay
\
2706/6600 2D26 'f' SDELAY1 \shortest delay
270A/6700 3326 'g' SDELAY2 \longer delay
270E/6800 3A26 'h' SDELAY3 \yet longer delay
2712/6900 4126 'i' SDELAY4 \longest delay
\
2716/6A00 4E26 'j' CLSZ \clear screen & home
271A/6B00 5526 'k' >CURSOR \move cursor
271E/6C00 5F26 'l' RETMSGZ \halt and wait for prompted input
2722/6D00 6626 'm' LENGTH \output a string of char
2726/6E00 6D26 'n' BELZ \make a bel
272A/6F00 7426 'o' DO_DELAY \execute programmed delay
272E/7000 7B26 'p' BOXZ \draw a box
2732/7100 9726 'q' 1ST_PAGE \switch to disp. page#1
2736/7200 A126 'r' 2ND_PAGE \switch to disp. page#2
273A/7300 B926 's' TONE_ON_0 \make programmed tone
273E/7400 C026 't' TONE_OFF \turn tone off
2742/7500 C726 'u' TONE_BURST \tone on/off
2746/7600 D926 'v' CLR_SOME \clr desired part of screen
274A/5800 E326 'X' TXT_END \this is the end of script cmmd.
\
274E/EEEE 8901 NOCASE $$FALSE
2752/E98EDA ENDCASE EXECUTE ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 26
DRIVER...Console out file driver
2755/ : ?TXT_LEN \n1 n2 n3 --- n1 n2 n3 n1
2755/E8CED9 03 E9ABDB 3 PICK ;
275C/ : SMALLEST_LEN \ --- n1
275C/E8E7D9 5210 E8BCDA OUTPUT_COUNT @
2764/E8EEFF E9A2DD ?TXT_LEN MIN ;
\sinfo(txt) sinfo(scrpt) flg --- sinfo(txt) sinfo(scrpt)
276A/ : OUTPUT_TEXT
276A/E808DA E34A IF \output text if flg is 1
276F/E882DE SSWAP \exchange sinfos
2772/E81FDB OVER \get addr..sinfo underneath
2775/E8E4FF SMALLEST_LEN \select smallest len
2778/E8BDDB E899DB >R I \save in ret. stk
277E/E8A9FC CPRINTS \output sinfo text
2781/E893DB E8E0DB I - \
2787/E88DDB E820DC I +2ND \
278D/E864DE SSWAP \exchange sinfos
2790/E8B3D9 5210 E888DA OUTPUT_COUNT @ \see if len is different
2798/E8A9DB R> \
279B/E8F3DA E867DC DDUP > \
27A1/E8D1D9 E305 E8BEDB IF - \if so set count = 0
27A9/EB06 E8F3DA E8D8D9 ELSE DDROP 0
27B1/E892D9 5210 E83EDA THEN OUTPUT_COUNT !
27B9/C3 THEN ;
27BA/ : ?NEW_TXT \refresh txt buf?
27BA/E8A3DE DROP3RD/4TH
27BD/E848FD READ_TEXT_FILE
27C0/E892FF ?TXT_LEN
27C3/E880D9 5210 E855DA E83ADC OUTPUT_COUNT @ >
27CE/E8A4D9 E319 IF
27D3/E870D9 5210 E845DA OUTPUT_COUNT @
27DB/E88CFF OUTPUT_TEXT
27DE/E813DE SSWAP
27E1/E871FF ?TXT_LEN
27E4/E89DD9 0=
27E7/E822FC ?USER_KEY
27EA/EB06 ELSE
27EC/E8E2FD E876D9 NO_TEXT_MSG 1
27F2/C3 THEN ;
27F3/ : ?TXT_DONE \ --- flg
27F3/E85FFF ?TXT_LEN \remaining text len
27F6/E883D9 E205 -IF \test if len = 0
27FB/ brk1: \label for FDT86 debugger
27FB/E8BCFF ?NEW_TXT \refresh text buf?
27FE/EB03 E886D9 ELSE 0 \else nothing
2803/C3 THEN ;
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 27
DRIVER...Console out file driver
2804/ : PROCESS_TXT_INTERVAL \sinfo(txt) sinfo(scrpt) ---
2804/E85CE2 CGET \get script char
2807/E8E3FE SCRIPT_ACTION \perform the script action
280A/E95DFF OUTPUT_TEXT ; \output text according
\to script control
280D/ : SCRIPT_DONE \ ---
280D/E835E0 10 53 63 72 69 70 74 20 65.. "Script exhausted"
2821/E8C1FB FPRINTS+CRS
2824/E98CFA SET_EXIT ;
2827/ : EXECUTE_ONE_SCRIPT \get a script & execute it
2827/E85ADA SLEN
282A/E848D9 E305 IF
282F/E8D2FF PROCESS_TXT_INTERVAL
2832/EB03 E8D6FF ELSE SCRIPT_DONE
2837/C3 THEN ;
2838/ : ?END_PROCESS
2838/E8B8FF ?TXT_DONE \text file exhausted?
283B/E808D9 5010 E8DDD9 EXIT_FLG @ \user or other exit?
2843/E9F4DB FOR ; \either condition?
2846/ : PROCESS_ALL_TXT \sinfo(txt) sinfo(scrpt) ---
2846/ BEGIN
2846/E8DEFF EXECUTE_ONE_SCRIPT \output one text segment
2849/E8ECFF ?END_PROCESS \is there more?
284C/E826D9 E3F5 UNTIL
2851/E84DDA E94ADA SDROP SDROP ; \throw away all sinfo
2857/1004 EQUIPMENT DW 0:410H \DOS equipment addr
2859/ : SET_CGA/MONO \ensure correct crt mode; ---
2859/E8DBD8 5728 E8BFD9 EQUIPMENT @
2861/E8C2D8 30 E8C8DB 30H FAND
2868/E8BBD8 30 E8A1DB 30H =
286F/E803D9 E306 E8AFD8 07 IF 80x25_MONO
2878/EB04 E8A9D8 02 ELSE 80x25_BW
287E/ THEN
287E/E9F4F6 SET_VIDEO_MODE ;
2881/ : INIT \intialize variables, screen etc..
2881/E8BFFA INIT_TIMER \save int vector addresses
2884/E8D2FF SET_CGA/MONO \make sure screen is compatible
2887/E80DFE E817DA 1ST_PAGE DROP \make sure first display page
288D/E8B6D8 5010 E949DB EXIT_FLG 0! ; \clear exit flag
PAGE
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 28
DRIVER...Console out file driver
\DOS level command to run this application is:
\DRIVER DEMO.TXT SCRIPT.SCR<cr>
\Batfile command is: RUNDEMO
\MAIN is entry point and top application word
2895/ : MAIN \type demo.txt under control
\of the script file
2895/E8E9FF INIT \reset exit
2898/E84FFC OPEN_FILES \open text & script files
289B/E87CFC READ_FILES
289E/E8A5FF PROCESS_ALL_TXT \output formatted text 'til
28A1/E852FC CLOSE_FILES \exhausted..back to DOS..
28A4/E927FB SCALE_UP/DOWN ; \wind up w/ the scales
\This is the application end. We hope you can see how
\powerful and easy FUTURE86 can make your projects...
28A7/BB 1B08 E816EA E8E5FF E994E6 E9A4..END MAIN
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 29
DRIVER...Console out file driver
***************** SYMBOL TABLE DUMP *****************
! F ----:01F7 !AH F ----:0D68 !AL F ----:0D70 !AX F ----:0D60
!BH F ----:0D80 !BL F ----:0D88 !BX F ----:0D78 !CH F ----:0D98
!CL F ----:0DA0 !CX F ----:0D90 !DH F ----:0DB0 !DI F ----:0DC8
!DL F ----:0DB8 !DS F ----:0DD0 !DS+DX F ----:0DE0 !DS+SI F ----:0DF0
!DX F ----:0DA8 !ES F ----:0DD8 !ES+BX F ----:0DE8 !ES+DI F ----:0DF8
!FH F ----:1549 !I F ----:0796 !J F ----:07A9 !K F ----:07AE
!L F ----:07B3 !SI F ----:0DC0 #1 F ----:1C96 #2 F ----:1C9E
#3 F ----:1CA6 $$-IF F ----:01A7 $$BLITERAL F ----:0126 $$CASE F ----:05BE
$$CSLITERAL F ----:0137 $$DO F ----:01B5 $$DSLITERAL F ----:0146 $$FALSE F ----:0189
$$FSLITERAL F ----:0155 $$IF F ----:0195 $$KV 00000043 $$LITERAL F ----:0104
$$LOOP F ----:01C4 $$MLITERAL F ----:0115 $$POPCX F ----:0175 $$POPCX+1 F ----:017C
$$RETF F ----:0103 $$SELECT F ----:05E0 $$SLITERAL F ----:0845 $$TRUE F ----:0168
* F ----:0380 + F ----:035D +! F ----:03A1 +2ND F ----:03AD
+CLEFT F ----:0A9D +CSEG F ----:068C +DSEG F ----:0690 +HEXLEFT F ----:0AB5
+SEG F ----:0682 +SLEFT F ----:0ADB - F ----:0367 -0RET; F ----:057E
-BLINK F ----:1F39 -DDROP0RET; F ----:05AF -DDROPRET; F ----:056B -DROP0RET; F ----:0596
-DROPRET; F ----:055F -INTENS F ----:1F2D -RET; F ----:054D -REVERSE F ----:1F4C
-ROT F ----:02CD / F ----:04DD /MOD F ----:038F 0! F ----:03DE
0< F ----:0429 0<> F ----:0424 0= F ----:0184 0B! F ----:04E3
0BFILL F ----:0534 0RET; F ----:0577 1! F ----:03E9 1+ F ----:0374
1+! F ----:03BB 1+2ND F ----:03B7 1+@ F ----:03C4 1+I F ----:0350
1- F ----:0378 1-! F ----:03D5 1B! F ----:04EC 1ST_PAGE F ----:2697
2* F ----:037C 2+ F ----:0371 20X25_COLOR 00000001 2CHR# F ----:2570
2CLEFT F ----:0A1C 2DUP F ----:027A 2ND_PAGE F ----:26A1 320X200_BW 00000004
320X200_COLOR 00000003 320X200_GRAPH 00000005 3BYTE# F ----:2561 40X25_BW 00000000
640X200_GRAPH 00000006 80X25_BW 00000002 80X25_MONO 00000007 < F ----:03F4
<= F ----:053D <> F ----:041E = F ----:0410 > F ----:0408
>= F ----:0543 >CURSOR F ----:2655 >R F ----:0338 ? F ----:105F
?CARRY F ----:0EAC ?CXZ P ----:0187 ?DUP F ----:027F ?END_PROCESS F ----:2838
?EXTENDED_COD F ----:100B ?NEW_TXT F ----:27BA ?NULL F ----:086E ?NULL0 F ----:087C
?OPEN_FILE F ----:24E2 ?PAGE# F ----:1F7D ?TIMER_DONE F ----:2308 ?TXT_DONE F ----:27F3
?TXT_LEN F ----:2755 ?USER_KEY F ----:240C ?WGET F ----:09EE ?ZERO F ----:0EB5
?ZF P ----:0166 @ F ----:0220 @AH F ----:0E08 @AL F ----:0E10
@AX F ----:0E00 @BH F ----:0E20 @BL F ----:0E28 @BX F ----:0E18
@CH F ----:0E38 @CL F ----:0E40 @CX F ----:0E30 @DH F ----:0E50
@DI F ----:0E68 @DL F ----:0E58 @DS F ----:0E70 @DS+DX F ----:0E80
@DS+SI F ----:0E92 @DX F ----:0E48 @ES F ----:0E78 @ES+BX F ----:0E89
@ES+DI F ----:0E9B @FL F ----:0EA4 @PNTR_ON_DS F ----:0694 @SI F ----:0E60
ABS F ----:04FD ANAT 000001B8 ARG F ----:1172 ARRAY! F ----:024B
ARRAY@ F ----:0266 ARRAYB! F ----:0244 ARRAYB@ F ----:025F ARRAYD! F ----:0254
ARRAYD@ F ----:026F B! F ----:01EB B@ F ----:0212 BACK_UP F ----:213D
BEL F ----:203F BELZ F ----:266D BFILL F ----:04B2 BIN-DECIMAL F ----:0BF1
BIN-HEXB F ----:0C3C BIN-HEXD F ----:0C48 BIN-HEXN F ----:0C37 BIN-HEXW F ----:0C42
BLACK F ----:1F59 BLINK F ----:1F33 BLINKZ F ----:2619 BMOVE F ----:04C2
BNAT 000001EF BOT_LINE F ----:222A BOX F ----:2234 BOXZ F ----:267B
BRK1 P ----:27FB C+ F ----:0923 CANCEL_FILE_B F ----:1639 CGET F ----:0A63
CHK0-9 F ----:0C83 CHK0-F F ----:0C5D CI F ----:0FAB CLEFT F ----:0A08
CLOSE F ----:1921 CLOSE_FILES F ----:24F6 CLR F ----:1FCA CLR_ERR_MSG F ----:14E0
CLR_SCREEN F ----:202A CLR_SOME F ----:26D9 CLS F ----:203A CLSZ F ----:264E
CNAT 00000108 CNXT 00000210 CO F ----:0FB4 CODE_BASE P ----:0000
CODE_SIZE ----:129F CONSTS F ----:0F9B COUNT_CHR F ----:09C1 CPRINTS F ----:242A
CREATE F ----:1667 CRIGHT F ----:0A49 CRLF F ----:1037 CRS F ----:2152
CRTATR ----:1EF2 CSEARCH F ----:0A73 CSEG F ----:066A CSPLIT F ----:0975
CTLC 00000003 CUPPER F ----:0B09 CUR_DRIVE F ----:1E70 D! F ----:0203
D* F ----:07B8 D+ F ----:06A9 D- F ----:06D2 D/ F ----:083F
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 30
DRIVER...Console out file driver
D/MOD F ----:07F4 D0= F ----:0773 D10* F ----:075D D= F ----:0770
D>R F ----:060E D@ F ----:022E DAND F ----:071D DATA_BASE ----:0000
DATA_SIZE ----:12A1 DCI F ----:1002 DCO F ----:101B DCOM F ----:074D
DCONSTS F ----:0FE0 DDROP F ----:02A1 DDROP0RET; F ----:05A5 DDUP F ----:0291
DECIMAL-BIN F ----:0CCE DELAY F ----:232F DELAY_TIME ----:22BB DELETE F ----:1DD3
DIRECTORY_BUF ----:101E DISABLE_CTL-C F ----:0F54 DISPLAY_ERR_M F ----:14F0 DMIN F ----:077C
DMOD F ----:0839 DNAT 00000129 DNEGATE F ----:0754 DO_DELAY F ----:2674
DOR F ----:072D DOVER F ----:0600 DRAW F ----:215F DRDROP F ----:064E
DROP F ----:02A4 DROP_SPACER F ----:09A3 DROP2ND F ----:02A8 DROP2ND/3RD F ----:0656
DROP3RD/4TH F ----:0660 DSEG F ----:0676 DSL F ----:06FC DSR F ----:0717
DSWAP F ----:05F4 DUMMY macro DUP F ----:0284 DURATION F ----:2356
DXOR F ----:073D EMGCY_REBOOT F ----:0F4C ENABLE_CTL-C F ----:0F76 ENAT 0000014A
EQUIPMENT ----:2857 ERR_MSG F ----:14D8 ESC_MSG F ----:23EE ESCAPE 0000001B
EXEC F ----:1336 EXEC_COMMAND F ----:14BF EXEC_COMMAND_ F ----:14B6 EXECUTE F ----:01E3
EXECUTE_ONE_S F ----:2827 EXIT F ----:035A EXIT_FLG ----:1050 FAND F ----:0430
FATAL_ERROR_C F ----:24CA FCO F ----:2071 FCOM F ----:04F5 FCRLF F ----:2144
FDI F ----:04D3 FEI F ----:04D5 FH F ----:1583 FILE_BUF ----:1FF4
FILE_SIZE 000061A8 FIN F ----:049D FLUSH F ----:18E1 FNAT 00000160
FNOP F ----:04D2 FNOT F ----:0184 FOR F ----:043A FOUR.NUMBERS F ----:2585
FOUT F ----:04A7 FPRINTS F ----:212B FPRINTS+CRS F ----:23E5 FREE_MEMORY F ----:11BA
FREQ F ----:224F FSIZE F ----:1EB9 FXOR F ----:0444 GET_ARG F ----:118E
GET_ATR F ----:1EF3 GET_CURS F ----:1FA2 GET_ENVIRONME F ----:1417 GET_MAXIMUM_M F ----:120D
GET_MEMORY F ----:11EC GETSI F ----:0865 GNAT 0000018C H_BIT F ----:2182
HEX-BIN F ----:0CF5 HLINE F ----:2190 HOME F ----:1FB8 I F ----:0317
IF0RET; F ----:058A IFRET; F ----:0556 IJ F ----:0634 INC_TIMER F ----:22DA
INIT F ----:2881 INIT_TIMER F ----:2343 INPUTBUFFER ----:027A INT_10H F ----:1F65
INT_21H F ----:0F39 INTENS F ----:1F27 INTENSZ F ----:2623 J F ----:0329
K F ----:032E KERNELSIZE 00000004 L F ----:0333 LASTDATA F ----:12FE
LCRLF F ----:10CF LEAVE F ----:01DA LENGTH F ----:2666 LF F ----:217B
LIMIT F ----:21CA LLCORN 000000C0 LO F ----:10B3 LONGLOOP 00000001
LONGREPEAT 00000001 LPRINT F ----:10BD LRCORN 000000D9 LSPACE F ----:10DC
LSPACES F ----:10E2 LVERT_LINE F ----:2217 MACRO2 00000000 MAIN F ----:2895
MAX F ----:0520 MIN F ----:050C MOD F ----:04D7 MODIFY_MEMORY F ----:128A
MOVE_FILE_POI F ----:1D97 NEGATE F ----:04F9 NINPUT F ----:1121 NINPUT+ERR F ----:111B
NO_TEXT_MSG F ----:25D1 NOCASE 0000EEEE NORM F ----:1F1A NORMZ F ----:2605
NOTE F ----:2362 NPRINT F ----:1070 NULL F ----:085E NUM1 ----:819C
NUM2 ----:819E NUM3 ----:81A0 NUM4 ----:81A2 NUMBER_GET F ----:252F
OFF F ----:229A OPEN F ----:16F7 OPEN_FILES F ----:24EA ORIG_VECTOR ----:22BF
OUTPUT_COUNT ----:1052 OUTPUT_ESC_MS F ----:2407 OUTPUT_TEXT F ----:276A OUTPUTBUFFER ----:0182
OVER F ----:0294 PACK F ----:047B PAGE# 0000:0462 PICK F ----:0307
PLAY F ----:236B POPAX macro POPAX&DS macro POPBX macro
POPBX&DS macro POPBX&DS/READ P ----:023A POPCX macro POPDI macro
POPDX macro POPES macro POPSI macro POPSI&DS macro
PRB F ----:1091 PRD F ----:109B PRN F ----:108C PROCESS_ALL_T F ----:2846
PROCESS_TXT_I F ----:2804 PROGRAMMED_EN F ----:25E6 PRSP F ----:10A0 PRTB 00000061
PRW F ----:1096 PSTACK_BASE ----:0100 PUSHAX macro PUSHAX&0 macro
PUSHAX&DS macro PUSHBX macro PUSHCX macro PUSHDI macro
PUSHDX macro PUSHES macro PUSHSI macro PUT_CURS F ----:1F90
QDUP F ----:0651 R> F ----:0344 R>D F ----:061E R>S F ----:061E
RDROP F ----:0357 READ F ----:1B0F READ_1CHR F ----:19A9 READ_1LINE F ----:1A5E
READ_CHAR/AT F ----:1FEE READ_FILES F ----:251A READ_TEXT_FIL F ----:2508 READAX macro
READAX&DS macro READBX macro READBX&DS macro REBOOT F ----:0F47
REBOOT+ F ----:0F3E RENAME F ----:1E03 RESET_DELAY F ----:2648 RESTORE_INT_N F ----:0F33
RET; F ----:0549 RETMSG F ----:243F RETMSGZ F ----:265F REVERSE F ----:1F3F
REVERSEZ F ----:260F ROT F ----:02B5 RSTACK_BASE ----:0180 RVERT_LINE F ----:220E
S! F ----:091D S+ F ----:0938 S-C F ----:09F7 S= F ----:0882
S>R F ----:060E S@ F ----:0865 SAVE_ORIG_VEC F ----:22ED SAVEIT ----:2242
FUTURE86 Compile List DRIVER.PRN(4-24-1987 8:18AM) page 31
DRIVER...Console out file driver
SCALE 000004C5 SCALE_DOWN F ----:237C SCALE_UP F ----:23A5 SCALE_UP/DOWN F ----:23CE
SCOPY F ----:08F2 SCREENSIZE ----:1EF0 SCRIPT_ACTION F ----:26ED SCRIPT_BUF ----:1054
SCRIPT_DONE F ----:280D SCROLL_UP_LIN F ----:2046 SCROLL_UP_ONE F ----:206C SDELAY1 F ----:262D
SDELAY2 F ----:2633 SDELAY3 F ----:263A SDELAY4 F ----:2641 SDROP F ----:02A1
SDUP F ----:0291 SEARCH_DIRECT F ----:1E84 SEARCH_DIRECT F ----:1EAC SEL_DRIVE F ----:1E7A
SEP F ----:2171 SET_CGA/MONO F ----:2859 SET_DELAY F ----:22FC SET_ERR_MSG F ----:14E8
SET_EXIT F ----:22B3 SET_FILE_BUFF F ----:1615 SET_FILE_POIN F ----:1D81 SET_INT_NO F ----:0F2B
SET_NEW_FILE_ F ----:1DBD SET_NEW_VECTO F ----:22E1 SET_ORIG_VECT F ----:22CB SET_PAGE# F ----:1F87
SET_VIDEO_MOD F ----:1F75 SET#1 F ----:1CAE SET#2 F ----:1CC6 SET#3 F ----:1CDE
SETDS macro SETDS&SS F ----:12C3 SETSP&BP macro SETUP F ----:2244
SETUP_BOX F ----:21D8 SINPUT F ----:10F5 SL F ----:0458 SLEFT F ----:089D
SLEN F ----:0284 SMALLEST_LEN F ----:275C SMID F ----:08E4 SNPRINT F ----:1075
SOUND_ON F ----:227A SOVER F ----:0600 SP! F ----:0303 SP@ F ----:02F7
SPACE F ----:1045 SPACES F ----:104C SPK_OFF 00000001 SPK_ON 00000003
SPRINT F ----:1025 SR F ----:044E SRIGHT F ----:08B5 SSEARCH F ----:0BA0
SSEARCH0 F ----:0B54 SSPLIT F ----:095D SSWAP F ----:05F4 SUPPER F ----:0B2D
SWAB F ----:0462 SWAN F ----:046B SWAP F ----:02E5 SWAW F ----:0471
SYSTEM_CALL F ----:0EBF TEST_ERROR F ----:24D9 TIMER_COUNT ----:22BD TIMER_DONE F ----:22C3
TIMER_INT 00000070 TIMER_VECTOR P ----:22DA TM_MDE_PRT 00000043 TMR_MDE_REG 000000B6
TMR2_PRT 00000042 TO_ASCIZ F ----:0D31 TO_ASCIZ_2ND F ----:14AA TO_ASCIZ_ADDR F ----:0D42
TONE F ----:22AE TONE_BURST F ----:26C7 TONE_CHANGE F ----:22A9 TONE_OFF F ----:26C0
TONE_ON F ----:26AB TONE_ON_0 F ----:26B9 TOP_LINE F ----:21F0 TWO_2CHR# F ----:2576
TXT_END F ----:26E3 ULCORN 000000DA UNPACK F ----:0488 URCORN 000000BF
V_BIT F ----:2189 VCLR F ----:1F0C VLINE F ----:21A3 VSET F ----:1EFE
WGET F ----:09E5 WHITE F ----:1F5F WRITE F ----:1C1E WRITE_1CHR F ----:1BD1
WRITE_1LINE F ----:1C70 WRITE_ATR F ----:201F WRITE_CHAR/AT F ----:2001 WRITE_CRLF F ----:1C50
WRITEAX macro WRITEAX&0 macro WRITEAX&DS macro XCO F ----:20F7
XLEFT F ----:08A0 XRIGHT F ----:08DB
NextCode=----:28C0 SymbolsRemaining=2816
NextData=----:81B0
Complete compilation